import BASE_URL from './env'

// 创建一个请求实例
console.log('当前平台信息', uni.getSystemInfoSync().platform)
const request = (options) => {
    // 设置默认配置
    const config = {
        url: BASE_URL + options.url, // 拼接基础 URL
        method: options.method || 'GET', // 默认为 GET 请求
        data: options.data || {}, // 请求数据
        header: options.header || {
            'Content-Type': 'application/json',
        }, // 请求头
        timeout: options.timeout || 10000, // 请求超时时间，单位为毫秒
    }

    // 获取平台类型
    const platform = uni.getSystemInfoSync().platform

    // 安卓平台下自定义请求头或其他特殊配置
    if (platform === 'android') {
        config.header['X-Android-Specific-Header'] = 'android-value' // Android 特定请求头
    }

    // H5 平台下自定义请求头或其他特殊配置
    if (platform === 'h5') {
        config.header['X-H5-Specific-Header'] = 'h5-value' // H5 特定请求头
    }

    // 获取存储的 Token（如果有）
    const token = uni.getStorageSync('token')
    if (token) {
        config.header['Authorization'] = `Bearer ${token}`
    }

    // 请求拦截
    uni.showLoading({
        title: '加载中...',
        mask: true,
    })

    // 发起请求
    return new Promise((resolve, reject) => {
        uni.request({
            ...config,
            success: (res) => {
                // 请求成功的回调
                uni.hideLoading() // 隐藏加载中提示

                // 根据返回的状态码做处理
                if (res.statusCode === 200) {
                    resolve(res.data) // 返回成功的数据
                } else {
                    reject(res.data || '请求失败')
                    uni.showToast({
                        title: res.data.message || '请求失败',
                        icon: 'none',
                    })
                }
            },
            fail: (err) => {
                uni.hideLoading() // 隐藏加载中提示
                reject(err)
                uni.showToast({
                    title: err.message || '网络错误，请稍后再试',
                    icon: 'none',
                })
            },
            complete: () => {
                // 请求完成后的回调（不论成功失败都会调用）
            },
        })
    })
}

// 请求方法封装
// export default {
//     get(url, data, header) {
//         return request({ url, data, header, method: 'GET' })
//     },
//     post(url, data, header) {
//         return request({ url, data, header, method: 'POST' })
//     },
//     put(url, data, header) {
//         return request({ url, data, header, method: 'PUT' })
//     },
//     delete(url, data, header) {
//         return request({ url, data, header, method: 'DELETE' })
//     },
// }

export default request
